\chapter{Implementation}
\pagestyle{scrheadings}
\label{cha:proof_of_concept_implementation}
Dieses Kapitel belegt die Anforderungen aus \autoref{part:anforderungsanalyse} und das Konzept aus \autoref{part:konzept} mittels Proof of Conecpt. Die Dokumentation der Implementation orientiert sich an den ermittelten funktionalen Anforderungen und den formulierten Qualitätsanforderungen.

\section{Funktionale Anforderungen}
\subsection{Browserspezifische Funktionen}
\subsubsection{XCommander installieren (\reffrequirement{frq:xcommander_installieren})}
Der Ablauf und der Vorgang bei der Installation der Erweiterung ist hauptsächlich vom unterstützten Browser abhängig. Ein detaillierte Installationsanleitung für jeden unterstützten Browser ist dem Anhang unter \autoref{sec:bedienungsanleitung_installation} zu entnehmen.

\subsubsection{XCommander updaten (\reffrequirement{frq:xcommander_updaten})}\label{subsubsec:implementation_xcommander_updaten}
Wie bereits im Konzept unter \autoref{subsec:konzept_funktionssicht_allgemein_xcommander_updaten} erwähnt, handelt es sich bei der Update-Funktion der Erweiterung um einen integrierten Bestandteil des jeweiligen Browsers. Da sich die Erweiterung erst im Prototyp-Stadium befindet, wird sie noch nicht über den Add-on Store des jeweiligen Browsers verteilt. Daher werden zum jetzigen Zeitpunkt noch keine automatischen Updates der Erweiterung unterstützt.

\subsubsection{XCommander debuggen (\reffrequirement{frq:xcommand_debug})}
Wie die Installation und das automatische Update der Erweiterung ist die Debugging"=Unterstützung vom jeweiligen Browser abhängig.

\subsection{XCommander Library}
Die Implementation der XCommander Library erfolgte nach der Struktur"= und Funktionssicht des Konzepts aus \autoref{part:konzept}.
\subsubsection{XCommander Messaging (\reffrequirement{frq:xcommander_messaging})}
Der \acrshort{w3c}"=Standard für Web Messaging (\vgl{\cite[]{w3c2011messaging}}) dient als Grundlage für die Kommunikations-Schnittstelle der Library. Der externe Zugriff auf die Library erfolgt in der Implementation immer über den generischen Messaging"=Server.
\subsubsection{XCommander XmlHttpRequest (\reffrequirement{frq:xcommander_xhr})}
Die Implementation der Library ermöglicht \verb|XmlHttpRequests| aus der Erweiterung. Die implementierte XmlHttpRequest"=Klasse bietet eine vereinfachte Schnittstelle um \verb|XmlHttpRequests| als GET"= oder Post"=Requests mit beliebigen Parametern aus einem XCommand aufzurufen.
\subsubsection{XCommander Local Storage (\reffrequirement{frq:xcommander_local_storage})}
Der \acrshort{w3c}"=Standard der Web Storage \acrshort{api} (\vgl{\cite[]{w3c2009storage}}) dient als Grundlage für die persistente Speicherverwaltung der Erweiterung. Die Storage"=Klasse implementiert neben den Grundfunktionalitäten der Web Storage \acrshort{api} auch eine Schnittstelle um komplexe Objekte wie ein XCommand im Local Storage zu speichern.

\subsection{XCommander Erweiterung}
\subsubsection{XCommander verwalten (\reffrequirement{frq:xcommander_verwalten})}
\begin{figure}[H]
   \centering
   \includegraphics[width=0.9\textwidth]{images/xcommander_verwalten}
   \caption{XCommander - Einstellungen}
   \label{fig:xcommander_einstellungen}
\end{figure}

\autoref{fig:xcommander_einstellungen} zeigt exemplarisch die Implementation der Einstellungsseite. Über die Einstellungsseite der XCommander Erweiterung können die installierten XCommands und allgemeine Einstellungen, wie die Sprache des \glspl{parser}, verwaltet werden. Die Einstellungsseite kann abhängig vom Browser direkt über einen Link geöffnet werden oder über das Built-In XCommand ">options"< (siehe Built-In XCommands im \autoref{subsec:xcommand_options}) aus dem Kommandozeilen"=Fenster.

Die Einstellungsseite ist ein \acrshort{html}"=Dokument, das die XCommander Content Library implementiert und im Extension Process der Erweiterung ausgeführt wird. Die Library wird benötigt um  XCommands installieren und verwalten zu können.
\newpage
\subsubsection{XCommand installieren (\reffrequirement{frq:xcommand_installieren})}
Die Implementation unterstützt zwei Varianten um XCommands in der Erweiterung zu installieren:
\begin{itemize}
  \item \textbf{Installation vom lokalen Filesystem}
  \item \textbf{Installation von einer Webseite}
\end{itemize}

Der logisch Ablauf im Hintergrund der Erweiterung ist bei beiden Varianten identisch. Nach dem ein lokales XCommand mittels der File \acrshort{api} oder ein XCommand auf einem Webserver über ein XmlHttpRequest eingelesen wurde, wird das XCommand"=Objekt validiert. Der Validierungs"=Prozess prüft, ob das XCommand alle erforderlichen Eigenschaften und Methoden implementiert. Ist das XCommand valide, wird die optionale \verb|install()|"=Methode (falls vorhanden) des XCommands ausgeführt. Anschliessend wird das XCommand als serialisiertes Objekt via Web Storage \acrshort{api} im Local Storage unter dem Namensraum der Erweiterung gespeichert. Anderenfalls wird eine Exception geworfen und dem Benutzer mitgeteilt, dass das XCommand eine inkonsistente Struktur aufweist.

\subsubsection{XCommand deinstallieren (\reffrequirement{frq:xcommand_deinstallieren})}
Nach der Bestätigung der definitiven Deinstallation des XCommands, wird die optionale \verb|deinstall()|"=Methode (falls vorhanden) des XCommand ausgeführt. Anschliessend wird das XCommand aus dem lokalen Speicher des Browsers entfernt. 

\subsubsection{XCommand de- bzw. reaktivieren (\reffrequirement{frq:xcommand_deactivate})}
Nach dem betätigen der Deaktivieren-Checkbox wird das Enabled"=Flag des XCommands mit dem aktuellen Wert der Checkbox überschrieben. Das serialisierte XCommand wird zurück in den lokalen speicher des Browser geschrieben.

\subsubsection{XCommand updaten (\reffrequirement{frq:xcommand_updaten})}
Das Update eines XCommands entspricht grundsätzlich der Neuinstallation eines XCommands. Die alte Version des XCommands wird erst nach erfolgreicher Validierung und Installation der neuen Version deinstalliert und aus dem lokalen Speicher des Browsers entfernt. 

\subsubsection{XCommand ausführen (\reffrequirement{frq:xcommand_run})}
\begin{figure}[H]
   \centering
   \includegraphics[width=0.9\textwidth]{images/xcommander_ausführen}
   \caption{XCommander Kommandozeilen Fenster}
   \label{fig:xcommander_ausfuehren}
\end{figure}
\autoref{fig:xcommander_ausfuehren} zeigt exemplarisch die Verwendung und das Ausführen des ">sbb"< XCommands. (siehe \autoref{subsec:anhang_sbb_xcommand}) 

Ein XCommand wird im Kommandozeilen"=Fenster der Erweiterung ausgeführt. Der intelligente \gls{parser} ermittelt die möglichen Argumente eines XCommands in Echtzeit und liefert Treffer sofort an die \verb|preview()|"=Methode des XCommands zurück. Nachdem betätigen der Return-Taste wird die \verb|execute()|"=Methode des XCommands aufgerufen und das Kommando ausgeführt.



\section{Qualitätsanforderungen}
\subsection[Browserunabhängigkeit]{Browserunabhängigkeit (\refqrequirement{qrq:browserunabhängigkeit})}
Die XCommander Erweiterung basiert auf dem Erweiterungskonzept des Chrome, Safari und Opera Browser. Proprietäre Browserfunktionen werden über das generische Browser"=Objekt gekapselt. Die XCommander Erweiterung lässt sich auf andere Browser adaptieren, die über ein ähnliches Erweiterungskonzept, wie die genannten drei Browser, verfügen.

\subsection[Erweiterbarkeit]{Erweiterbarkeit (\refqrequirement{qrq:erweiterbarkeit})}
Das Konzept der XCommander Erweiterung erlaubt die Funktionalität der Erweiterung um beliebige XCommands zu erweitern. Das Konzept und die Architektur des \glspl{parser}, erlauben die Grammatik der pseudo-natürlichen Sprache um semantische Rollen und Noun Types zu erweitern und somit zu verbessern. 

\subsection[Usability]{Usability (\refqrequirement{qrq:usability})}
Das Kommandozeilen"=Fenster der XCommander Erweiterung lässt sich hauptsächlich über die Tastatur bedienen. Dank dem \gls{parser}"=Echo bekommt der Nutzer sofort eine Rückmeldung, ob die eingegebenen Argumente interpretiert werden konnten. Neben dem \gls{parser}"=Echo wird die Benutzerfreundlichkeit der Erweiterung durch die ">Autocomplete"<"=Funktion in der Kommandozeile erhöht.

\subsection[Sicherheit]{Sicherheit (\refqrequirement{qrq:sicherheit})}
Über die Manifest-Datei der Erweiterung können Zugriffsrechte mittels Wildcards auf beliebige Domains vergeben werden.  Bei der Installation von XCommands von einer Webseite wird dem Nutzer der Source Code des XCommands angezeigt. Somit kann gewährleistet werden, dass ein XCommand kein bösartigen Absichten hat und über keinen schädlichen JavaScript"=Code verfügt.

\subsection[Internationalisierung]{Internationalisierung (\refqrequirement{qrq:internationalisierung})}
Das Konzept des \glspl{parser} ist sprach-neutral. Der \gls{parser} des Prototyps unterstützt Deutsch und Englisch, weitere Sprachen lassen sich ohne grösserem Aufwand implementieren.
Das gesamte \gls{front_end} und \gls{back_end} der Prototyp"=Erweiterung unterstützt zum jetzigen Zeitpunkt nur die deutsche Sprache.

\subsection[Modularisierung]{Modularisierung (\refqrequirement{qrq:modularisierung})}
Aufgrund der losen Kopplung zwischen Library und Erweiterung, kann das Library-Modul auch unabhängig von der XCommander Erweiterung für andere Projekte verwendet werden.